<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=
    , initial-scale=1.0">
    <title>Document</title>
</head>
<body>   
</body>
</html>
<script>
//async函数   返回值结果是Promise对象  
//            Promise对象的结果由async函数执行的返回结果决定 
    async function main(){
        //  返回值由函数中return决定的 
        //1 如果返回值是一个非promise类型的数据(Number,Boolean,String...) 那这个结果就是一个成功的Promise结果对象 return后面写什么成功的结果就是什么 
        //   return 123
        //2 如果返回的是一个Promise对象
             return new Promise((resolve,reject)=>{
                resolve("ok")   // main()函数的结果是由内部Promise结果决定的 
                // reject("err")   
             })
        //3 抛出异常 那么他就是失败的状态 结果是抛出的值 
        // throw "on err"      
    }
    let reslut = main();
    console.log(reslut)     
    //Promise 
    //1 Promise {<fulfilled>: 123}



//await表达式 await右侧的表达式一般为Promise对象但也可以是其他值 
//            如果表达式是Promise对象，await返回的是Promise成功的值  
//            如果表达式是其他值不是Promise对象  直接将此作为await的返回值      
//            await必须写在async中，async中可以不写await
//            如果await的Promise失败了，就会抛出异常，则需要通过try...catch捕获处理 
    //await 100;  // 报错 await is only valid in async functions and the top level bodies of modules    
    async function me(){
        let p = new Promise((resolve,reject)=>{
            resolve('ok')
        })
        //1 右侧为promise的情况下 则await会返回那个Promise对象成功的值
        let res = await p;    //告诉js代码运行到await关键字处暂停执行代码，等待结果返回，并再结果返回处继续执行代码  
        console.log(res)      //ok 
        //2 如果awiat右侧为其他类型的数据 是什么就返回什么
        let res2 = await 20;    
        console.log(res2)     //20 
        //3 如果Promise是一个失败的状态 使用try catch捕获即可
    }
    me()                      //ok 20 






</script>